今天要來解析xml文件了,首先要先取得xml的文件,在opendata上可以找到很多xml資料。
下載完成後要來讀取文件,在這之前可以先開一個資料夾用來存放xml文件,在專案上點右鍵選擇New -> Folder -> Assets Folder。

接下來將下載下來的xml文件放到assets中。
之後便能夠開始使用XmlPullParser來解析xml文件了,首先要來讀取檔案。
fun getAssetsStream(){
          try {
              val tourData: InputStream = activity!!.assets.open("tour.xml")
          }  catch (e: Exception){
              e.printStackTrace()
          }
    }
之後便能夠使用XmlPullParser來解析tourData。
fun getAssetsStream(){
          try {
              val tourData: InputStream = activity!!.assets.open("tour.xml")
              val xmlPullParser = Xml.newPullParser()
              //xml解析器
              xmlPullParser.setInput(tourData, "utf-8")
          }  catch (e: Exception){
              e.printStackTrace()
          }
    }
這邊先貼上我的xml結構
<ROOT>
    <RECORD></RECORD>
    <RECORD></RECORD>
    <RECORD></RECORD>
    <RECORD></RECORD>.....
</ROOT>
RECORD內容:
<ROOT>
    <RECORD>
        <景點ID></景點ID>
        <狀態></狀態>
        <名稱></名稱>
        <簡述></簡述>
        <介紹></介紹>
        <鄉鎮市區></鄉鎮市區>
        <地址></地址>
        <東經></東經>
        <北緯></北緯>
        <電話></電話>
        <大眾運輸></大眾運輸>
        <門票資訊></門票資訊>
        <行車資訊></行車資訊>
        <停車資訊></停車資訊>
        <旅遊叮嚀></旅遊叮嚀>
    </RECORD>
</ROOT>
只要取得節點後變能夠將資料顯示出來,log的部分可以在下方的Logcat找到。
fun getAssetsStream(){
          try {
              val tourData: InputStream = activity!!.assets.open("tour.xml")
              val xmlPullParser = Xml.newPullParser()
              //xml解析器
              xmlPullParser.setInput(tourData, "utf-8")
              //取得xml節點
              var eventType = xmlPullParser.eventType
              //讀取xml資料
                  while (eventType != XmlPullParser.END_DOCUMENT) {
                  when (eventType) {
                      //xml找到的節點儲存到list
                      XmlPullParser.START_TAG -> if (xmlPullParser.name == "RECORD") {
                          //節點-名稱
                      } else if (xmlPullParser.name == "名稱") {
                          val name = xmlPullParser.nextText()
                          Log.e("tour", "name: $name")
                          //節點-區域
                      } else if (xmlPullParser.name == "鄉鎮市區") {
                          val area = xmlPullParser.nextText()
                          Log.e("tour", "area: $area")
                          //節點-地址
                      } else if (xmlPullParser.name == "地址") {
                          val addr = xmlPullParser.nextText()
                          Log.e("tour", "addr: $addr")
                          //節點-經度
                      } else if (xmlPullParser.name == "東經") {
                          val eastL = xmlPullParser.nextText()
                          Log.e("tour", "eastL: $eastL")
                          //節點-緯度
                      } else if (xmlPullParser.name == "北緯") {
                          val northL = xmlPullParser.nextText()
                          Log.e("tour", "northL: $northL")
                      }
                      //節點結束
                      XmlPullParser.END_TAG -> if (xmlPullParser.name == "RECORD") {
                      }
                  }
                  //下一個xml節點
                  eventType = xmlPullParser.next()
              }
              tourData.close()
          }  catch (e: Exception){
              e.printStackTrace()
          }
    }

今天的部結束,明天要將資料顯示到sspinner上。